/*
总是用 Class，取代需要 prototype 的操作。
因为 Class 的写法更简洁，更易于理解。
*/

// bad
function Queue(contents = []) {
	this._queue = [...contents];
}
Queue.prototype.pop = function() {
	const value = this._queue[0];
	this._queue.splice(0, 1);
	return value;
}

// good
class Queue {
	constructor(contents = []) {
		this._queue = [...contents];
	}
	pop() {
		const value = this._queue[0];
		this._queue.splice(0, 1);
		return value;
	}
}

/*
使用extends实现继承，因为这样更简单，不会有破坏instanceof运算的危险。
*/

// bad
const inherits = require('inherits');

function PeekableQueue(contents) {
	Queue.apply(this, contents);
}
inherits(PeekableQueue, Queue);
PeekableQueue.prototype.peek = function() {
	return this._queue[0];
}

// good
class PeekableQueue extends Queue {
	peek() {
		return this._queue[0];
	}
}
